#pragma warning disable 108
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using Cephei;
using Cephei.Core;
using Cephei.Core.Generic;
using Microsoft.FSharp.Core;
using Cephei.QL.Math.Optimization;
using Cephei.QL.Times;
using Cephei.QL;
namespace Cephei.QL.Termstructures.Volatility
{
    /// <summary> 
	/// 
	/// </summary>
    [Guid ("04044831-0086-4b14-BC8B-F585AFD05EC0"),ComVisible(true)]
	public interface ISabrInterpolatedSmileSection : Cephei.QL.Termstructures.Volatility.ISmileSection
	{
		///////////////////////////////////////////////////////////////
        // Methods
        //
        /// <summary> 
		/// 
		/// </summary>
		 Double Alpha {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Double AtmLevel {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Double Beta {get;}
        /// <summary> 
		/// 
		/// </summary>
		 QL.Math.Optimization.EndCriteria.TypeEnum EndCriteria {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Double MaxError {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Double MaxStrike {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Double MinStrike {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Double Nu {get;}
        /// <summary> 
		/// 
		/// </summary>
		 ISabrInterpolatedSmileSection PerformCalculations {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Double Rho {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Double RmsError {get;}
        /// <summary> 
		/// 
		/// </summary>
		 ISabrInterpolatedSmileSection Update {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Double VarianceImpl(Double strike);
        /// <summary> 
		/// 
		/// </summary>
		 Double VolatilityImpl(Double strike);
    }   

    /// <summary> 
	///  Factory
	/// </summary>
   	[ComVisible(true)]
    public interface ISabrInterpolatedSmileSection_Factory 
    {
        ///////////////////////////////////////////////////////////////
        // Factory methods
        //
        /// <summary> 
		/// 
		/// </summary>
	    ISabrInterpolatedSmileSection Create (DateTime optionDate, Double forward, Cephei.Core.IVector<Double> strikes, Boolean hasFloatingStrikes, Double atmVolatility, Cephei.Core.IVector<Double> vols, Double alpha, Double beta, Double nu, Double rho, Microsoft.FSharp.Core.FSharpOption<Boolean> isAlphaFixed, Microsoft.FSharp.Core.FSharpOption<Boolean> isBetaFixed, Microsoft.FSharp.Core.FSharpOption<Boolean> isNuFixed, Microsoft.FSharp.Core.FSharpOption<Boolean> isRhoFixed, Microsoft.FSharp.Core.FSharpOption<Boolean> vegaWeighted, Microsoft.FSharp.Core.FSharpOption<Cephei.QL.Math.Optimization.IEndCriteria> endCriteria, Microsoft.FSharp.Core.FSharpOption<Cephei.QL.Math.Optimization.IOptimizationMethod> method, Microsoft.FSharp.Core.FSharpOption<Cephei.QL.Times.IDayCounter> dc);
        /// <summary> 
		/// 
		/// </summary>
	    ISabrInterpolatedSmileSection Create (DateTime optionDate, Cephei.QL.IQuote forward, Cephei.Core.IVector<Double> strikes, Boolean hasFloatingStrikes, Cephei.QL.IQuote atmVolatility, Cephei.Core.IVector<Cephei.QL.IQuote> volHandles, Double alpha, Double beta, Double nu, Double rho, Microsoft.FSharp.Core.FSharpOption<Boolean> isAlphaFixed, Microsoft.FSharp.Core.FSharpOption<Boolean> isBetaFixed, Microsoft.FSharp.Core.FSharpOption<Boolean> isNuFixed, Microsoft.FSharp.Core.FSharpOption<Boolean> isRhoFixed, Microsoft.FSharp.Core.FSharpOption<Boolean> vegaWeighted, Microsoft.FSharp.Core.FSharpOption<Cephei.QL.Math.Optimization.IEndCriteria> endCriteria, Microsoft.FSharp.Core.FSharpOption<Cephei.QL.Math.Optimization.IOptimizationMethod> method, Microsoft.FSharp.Core.FSharpOption<Cephei.QL.Times.IDayCounter> dc);
    }
}

